package cn.plushine.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;
import java.util.Map;

/**
 * JWT工具类
 */
public class JWTUtils {

    // 安全密钥
    private static final String SECRETARY = "@sdf#dfd$%er^";

    /**
     * 创建token，参数：payload中的信息
     */
    public static String getToken(Map<String, String> map) {
        // 获取Calendar实例
        Calendar instance = Calendar.getInstance();
        // 配置instance，保证getTime()后获取的是七天后的时间
        instance.add(Calendar.DATE, 7);

        // 创建builder实例
        JWTCreator.Builder builder = JWT.create();

        // 设置过期时间
        builder.withExpiresAt(instance.getTime());
        // 设置payload
        map.forEach(builder::withClaim);
        // 设置signature，并返回生成的token（我写在了一起）
        return builder.sign(Algorithm.HMAC256(SECRETARY));
    }

    /**
     * 验证token，这里面不需要写try/catch，调用的时候再使用
     */
    public static DecodedJWT verifyToken(String token) {
        return JWT.require(Algorithm.HMAC256(SECRETARY)).build().verify(token);
    }
}